// 鉴权模块

// 引入需要校验的路由
import allRoutes from '@/router/autosetroute'

// 引入获取菜单的api
import * as api from '@/api/permission'

// 引入递归创建用户路由的方法
import recursionRoutes from '@/utils/recursionRoutes'
import router from '@/router'
import dynamicRoute from '@/router/dynamicRoutes'

// 只有home中的是动态路由，所以从allRoutes中拿到所有动态路由  
let routes = allRoutes.find(item => item.name === 'home')


export default{
    namespaced: true,
    state: {
        // 设置变量用来接收用户权限对应的动态路由
        userMenu:[],

        // 设置变量用来设置面包屑
        crumb:[]
    },
    mutations: {
        // 已经得到了用户权限对应的动态路由，赋值给userMenu即可
        SET_USER_MENU(state,payload){
            state.userMenu = [...payload]
           
            // 向dynamicRoute动态路由的children中添加根据用户权限对应的动态路由
            // 除了通过鉴权方法获得的角色动态路由，还要添加预支付组件,
            // 因为重新给dynamicRoute.children赋值了，所以原来dynamicRoute.children
            // 中的payment,payorder就会消失，所以直接在新的数组中展开
            // 原来的dynamicRoute.children
            dynamicRoute.children = [...payload,...dynamicRoute.children]
            // 动态添加路由，使用router.addRoute这个方法
            // console.log(dynamicRoute);


            router.addRoute(dynamicRoute)
            // console.log(router);
            // console.log(dynamicRoute);
        },



        // 设置面包屑
        SET_CRUMB(state,payload){
            state.crumb = payload
        }
    },
    actions: {
        // 获取服务器根据角色返回的储存在本地的token返回的菜单
        FETCH_MENU_LIST({commit}){
            return api.getMenuList()
                .then(res => {
                    // console.log(res);
                    // 这里的userMenu是我定义的变量
                    // 和state中的userMenu没有关系
                    
                    let userMenu = recursionRoutes(res.data.menuList,routes.children)

                    // console.log(userMenu);
                    commit('SET_USER_MENU',userMenu)
                })
        }
    }
}